# 获取用户的登录信息
import functools

from flask import session, current_app, abort, g

from ihome.models import User


def user_login_data(f):  # f = 原来的news_detail

    @functools.wraps(f)  # 可以让被装饰的函数使用指定函数的函数信息(函数名__name__, 函数文档__doc__)
    def wrapper(*args, **kwargs):
        # 从session中取出用户的登录状态
        user_id = session.get("user_id")
        user = None
        if user_id:  # 用户已登录
            # 根据user_id取出用户数据
            try:
                user = User.query.get(user_id)
            except BaseException as e:
                current_app.logger.error(e)
                return abort(500)

        # return user
        g.user = user  # 可以使用g变量来记录数据

        # print(wrapper.__name__)  # 获取函数的名称
        # 执行原功能
        return f(*args, **kwargs)

    return wrapper


# 文件上传
def upload_file(data):
    """
    文件上传七牛云
    :param data:  要上传的文件/数据
    :return: 保存后生成的随机文件名
    """
    import qiniu

    access_key = "kJ8wVO7lmFGsdvtI5M7eQDEJ1eT3Vrygb4SmR00E"
    secret_key = "rGwHyAvnlLK7rU4htRpNYzpuz0OHJKzX2O1LWTNl"
    bucket_name = "infonews24"  # 空间名称

    q = qiniu.Auth(access_key, secret_key)
    key = None  # 设置文件名, 如果不设置, 会自动生成随机文件名
    token = q.upload_token(bucket_name)
    ret, info = qiniu.put_data(token, key, data)
    if ret is not None:  # 上传成功
        return ret.get('key')  # 文件名
    else:
        raise BaseException(info)